#include "../game.h"
#include "hast.h"

/*---------------------------------

Hast::Hast( bool spelare, short x, short y )
virtual
Konstruktor, sätter bild och typ

---------------------------------*/

Hast::Hast( bool spelare, short x, short y ) : Pjas(spelare, x, y) {
	bild = video.loadImage( spelare == VIT ? "vit_hast.bmp" : "svart_hast.bmp" );
	typ = HAST;
}

/*---------------------------------

bool Hast::mojligtDrag( short x, short y )
overloadad, virtual
Kollar om springaren kan gå till x, y
Argument: positionen x,y
Return: 0 om ej giltigt, 1 om giltigt

---------------------------------*/

bool Hast::mojligtDrag( short x, short y )  {
	if( ( x == xpos+1 || x == xpos-1 ) && ( y == ypos+2 || y == ypos-2 ) ) {
		// Om positionen inte har någon pjäs, är draget giltigt.
		if( game->pjasArray[x][y] == NULL ) {
			return 1;
		}
		// Om positionen har en pjäs som är fiende, är draget giltigt.
		if( game->pjasArray[x][y] != NULL && game->pjasArray[x][y]->spelare != this->spelare ) {
			return 1;
		}
	}
	if( ( x == xpos+2 || x == xpos-2 ) && ( y == ypos+1 || y == ypos-1 ) ) {
		if( game->pjasArray[x][y] == NULL ) {
			return 1;
		}
		if( game->pjasArray[x][y] != NULL && game->pjasArray[x][y]->spelare != this->spelare ) {
			return 1;
		}
	}
	return 0;
}

/*---------------------------------

void Hast::mojligtDrag( void )
overloadad, virtual
Kollar vilka positioner springaren kan gå till.
Sätter: 0 kan inte gå, 1 kan gå

---------------------------------*/

void Hast::mojligtDrag( void ) {
	// Nollställ arrayen
	for( int i = 0; i < 8; i++ ) {
		for( int j = 0; j < 8; j++ ) {
			mojligaDrag[i][j] = 0;
		}
	}

	// Array med offsets till dragen
	static const short drag[8][2] = {{1, 2}, {2, 1}, {2, -1}, {1, -2}, {-1, 2}, {-2, 1}, {-2, -1}, {-1, -2}};

	// Loopa genom drag-arrayen
	for( int i = 0; i < 8; i++ ) {
		short x, y;
		x = xpos + drag[i][0];
		y = ypos + drag[i][1];
		// Avbryt om draget är utanför brädet
		if( x < 0 || x > 7 || y < 0 || y > 7 ) {
			continue;
		}

		// Kolla om draget är möjligt. (existerarPjas är bool)
		mojligaDrag[x][y] = Pjas::existerarPjas( x, y );

	}
}
